﻿// 我的队列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;

class Node {
public:
	int data;
	Node* next;

public:	Node(int value) :data(value), next(nullptr) {}

};

class LinkedListQueue {

private:
	Node* front;
	Node* rear;

public: LinkedListQueue() :front(), rear() {}

/*
一开始队伍空，两人都闲着。

第一个人 1 来了，两人都指向 1。

第二个人 2 来了：

先让 1 的手（next）拉住 2。

然后 rear 这个人移动到 2 的位置。

此时 front 仍站在 1 的位置，rear 站在 2 的位置，1 的手拉着 2。

*/
 public: void Insert(int value)
   {
		Node * newNode = new Node(value);
		if (front == nullptr) {
			front = rear = newNode;
		}
		else {
			rear->next = newNode;
			rear = rear->next;
			/*rear = newNode;
			* rear = rear->next;
			* 这两行是一个意思
			* */
			
		} 
   }

public: void Print()
{
	Node* temp = front;
	while (temp != nullptr) {

		
		cout << temp->data << endl;
		temp = temp->next;
	
	}
}

	  void dequeue() {
	/*	  if (isEmpty()) {
			  cout << "Queue is empty\n";
			  return;
		  }*/

		  // 保存当前队首节点以便删除
		  Node* temp = front;

		  // 移动front指针到下一个节点
		  front = front->next;

		  // 如果队列变为空，也要更新rear指针
		  if (front == nullptr) {
			  rear = nullptr;
		  }

		  // 释放原队首节点内存
		  delete temp;
	  }

	  void GetFirst() 
	  {
		  if (front != nullptr) {
			  cout << " 首位数据=="  << front->data << endl;
		  }
	  }

};

void main()
{
	LinkedListQueue link;
	link.Insert(1);
	link.Insert(2);
	link.Insert(3);
	link.Print();
	link.GetFirst();
}

